package main

import "fmt"

// 切片拷贝
func main() {
	a1 := []int{1, 3, 5, 7}
	a2 := a1
	var a3 = make([]int, 10)
	copy(a3, a1)
	fmt.Printf("a1: %v\n", a1) // a1: [1 3 5 7]
	fmt.Printf("a2: %v\n", a2) // a2: [1 3 5 7]
	fmt.Printf("a3: %v\n", a3) // a3: [1 3 5 7 0 0 0 0 0 0]

	a1[0] = 100
	fmt.Printf("a1: %v\n", a1) // a1: [100 3 5 7]
	fmt.Printf("a2: %v\n", a2) // a2: [100 3 5 7]
	fmt.Printf("a3: %v\n", a3) // a3: [1 3 5 7 0 0 0 0 0 0]

	// 删除切片 删除切片a1中索引为2的元素
	a1 = append(a1[0:2], a1[3:]...)
	fmt.Printf("a1: %v len:%d cap:%d\n", a1, len(a1), cap(a1)) // a1: [100 3 7] len:3 cap:4

	var ary = [...]int{1, 2, 3, 5}
	s1 := ary[:]
	s1 = append(s1[:1], s1[2:]...) // 修改了底层数组（切片不保存值，对应了一个底层数组，底层数组占用了一块连续的内存）
	fmt.Printf("s1: %v\n", s1)     // s1: [1 3 5]
	fmt.Printf("ary: %v\n", ary)   // ary: [1 3 5 5]
}
